package nine;

import static util.Print.print;

/**
 * Created by ab on 2016/11/3.
 * 为什么要使用工厂方法、
 */
interface Game {
    boolean move();
}

interface GameFactory {
    Game getGame();
}

class Checkers implements Game {
    private int moves = 0;
    private static final int MOVES = 3;

    @Override
    public boolean move() {
        print("Checkers move " + moves);
        return ++moves!=MOVES;
    }
}

class CheckersFactory implements GameFactory {
    @Override
    public Checkers getGame() {
        return new Checkers();
    }
}

class Chess implements Game {
    private int moves = 0;
    private static final int MOVES=4;
    @Override
    public boolean move() {
        print("Chess move "+moves);
        return ++moves!=MOVES;
    }
}

class ChessFactory implements GameFactory{
    public Chess getGame(){
        return new Chess();
    }
}

public class lesson5 {
    public static void playGame(GameFactory factory){
        Game s =factory.getGame();
        while(s.move())
            ;
    }
    public static void main(String[] args){
        playGame(new CheckersFactory());
        playGame(new ChessFactory());
    }
}
